cv2和PIL.Image之间的转换

您所在的位置:网站首页 pil image size limit cv2和PIL.Image之间的转换

cv2和PIL.Image之间的转换

2023-07-29 00:15| 来源: 网络整理| 查看: 265

PIL.Image转换成OpenCV格式:

import cv2 from PIL import Image import numpy image = Image.open("plane.jpg") image.show() img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR) cv2.imshow("OpenCV",img) cv2.waitKey()

cv2保存图片用cv2.imwrite("/home/1.jpg" ,frame * 1) # *1才为彩色,后面*1可以不写 cv2看图片大小用 img.shape # 它的输出是(480, 640, 3),记住这里宽是480,长是640,深度是3色的彩色 cv2裁剪用img = img[60:420, 60:580, :] #eg:[宽为60~(480-60),长为60~(640-60),第三个是选择全部深度]

OpenCV转换成PIL.Image格式:

import cv2 from PIL import Image import numpy img = cv2.imread("plane.jpg") cv2.imshow("OpenCV",img) image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) image.show() cv2.waitKey()

PIL的Image保存图片用img.save(“001.jpg”) PIL的Image看图片大小用frame.size PIL的Image裁剪用crop

# box = (100, 100,lab_w-100,lab_h-100) # 左 上 右 下(控制裁剪框大小)(前两个小于后两个数值) # img = img.crop(box)

还有tabel里面画框用cv2.rectangle

# 画框-->cv2.rectangle frame = cv2.rectangle(frame, (100,100 ), (lab_w-100,lab_h-100 ), (0, 0, 255), 6) #后面两个分别是颜色和框的宽度

不要cv2转换PIL的Image,此时还是480宽,640高,再来放大原来label大小再来crop裁剪,这样放大会丢失所以还是原图修改,直接按比例就好附上我自己的代码来提高图像稳定性

def Preheat(self): temperature = True # 用来对比,有按下后没按下两者稳定性是否有很大差别,True表示预热去掉边框外的影响,False表示原来整张图加载进去的 capture = self.capture # 当然我前面def __init__里面有self.capture = cv2.VideoCapture(0) # 获取一帧 ret,frame = capture.read() # print(frame.shape) # print("lab_w:%d" % (lab_w)) # print("lab_h:%d" % (lab_h)) frame = cv2.flip(frame, flipCode=1) # 水平翻转,我label是1356长,837宽 x = int(100/837*480) # 因为下面不准有小数所以转int,有那么一行误差啦不影响 w = int(480-100/837*480) y = int(100/1356*640) h = int(640-100/1356*640) frame = frame[x:w, y:h, :] # 这个cv2里面的裁剪,eg:[宽为60~(480-60),长为60~(640-60),第三个是选择全部深度] cv2.imwrite("000.jpg",frame)

还有提醒一下:如果是显示视频的话,还是用cv2.imshow(‘frame’,img),因为死循环while image.show()会不断创建新进程。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3